// 数组分组，将传入的数据按指定特征进行分组。
// 输入: 数组值，函数或者属性
// 输出: 对象
// key: 数组所有元素经过处理后的值
// value: 相同key的数组元素集合

function groupBy(arr, fn) {
    return arr.map(item=>{
        if(typeof fn === 'function') {
            return fn(item);
        }else {
            return item[fn];
        }
    }).reduce((pre, cur, i) => {
        if(!pre[cur]) {
            pre[cur] = [arr[i]];
        }else{
            pre[cur] = pre[cur].concat(arr[i]);
        }
        return pre;
    }, {});
}

console.log(groupBy([5.1,8.2,8.4,9.5,5.0], Math.floor));
console.log(groupBy(['one','day','index'], 'length'));